//
//  Networking.h
//
//
//  Created by mysj on 16/7/11.
//  Copyright © 2016年 zeng. All rights reserved.
//


#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import "AFHTTPSessionManager.h"

#ifdef DEBUG
#define Log(s, ... ) NSLog( @"[%@ in line %d] ===============>%@", [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __LINE__, [NSString stringWithFormat:(s), ##__VA_ARGS__] )
#else
#define Log(s, ... )
#endif

typedef NS_ENUM(NSUInteger, ResponseType) {
    kResponseTypeJSON,
    kResponseTypeXML,
    kResponseTypeData
};

typedef NS_ENUM(NSUInteger, RequestType) {
    kRequestTypeJSON, // 默认
    kRequestTypePlainText // 普通text/html
};


typedef NS_ENUM(NSInteger, NetworkStatus) {
    kNetworkStatusUnknown,//未知网络
    kNetworkStatusNotReachable,//网络无连接
    kNetworkStatusReachableViaWWAN,//2，3，4G网络
    kNetworkStatusReachableViaWiFi,//WIFI网络
};

typedef NS_ENUM(NSInteger, HTTPMethod) {
    GET,
    POST,
};

/**
 *  进度
 *  @param bytesWritten              已完的大小
 *  @param totalBytesWritten         总上传大小
 */
typedef void (^Progress)(int64_t bytesRead, int64_t totalBytesRead);
/**
 *  回调
 *
 */
typedef void (^Response)(id _Nullable response,  NSError * _Nullable error);


@interface Networking : AFHTTPSessionManager

/**
 *  个性化配置请求格式
 *
 *  @param baseUrl      基地址  Default nil
 *  @param timeout      请求时长 Default 30s
 *  @param httpHeaders  配置公共请求头 Default nil
 */
+ (void)setBaseUrl:(nullable NSString *)baseUrl Timeout:(NSTimeInterval)timeout HttpHeaders:(nullable NSDictionary *)httpHeaders;

/**
 *
 *	获取缓存总大小/bytes
 *
 *	@return 缓存大小
 */
+ (unsigned long long)totalCacheSize;

/**
 *  清除缓存
 */
+ (void)clearCaches;

/**
 *	取消所有请求
 */
+ (void)cancelAllRequest;

/**
 *
 *	取消某个请求
 *
 *	@param url  可以是绝对URL，也可以是path
 */
+ (void)cancelRequestWithURL:(nonnull NSString *)url;


#pragma mark -

/// 网络请求方法
/// @param url  URLString
/// @param parameters 参数字典
/// @param Response   完成回调
+ (void)get:(nonnull NSString *)url parameters:(nonnull NSDictionary *)parameters Response:(nonnull Response)response;

+ (void)post:(nonnull NSString *)url parameters:(nonnull NSDictionary *)parameters Response:(nonnull Response)response;


#pragma mark - up
/**
 *
 *	图片上传
 *
 *	@param image		图片对象
 *	@param url			上传图片的接口路径，如/path/images/
 *	@param filename		图片名
 *	@param name			与指定的图片相关联的名称，这是由后端写接口的人指定的，如imagefiles
 *	@param mimeType		默认为image/jpeg
 *	@param parameters	参数
 *	@param progress		上传进度
 *	@param response		回调
 */
+ (nullable NSURLSessionDataTask *)uploadWithImage:(nonnull UIImage *)image
                                               url:(nonnull NSString *)url
                                          filename:(nullable NSString *)filename
                                              name:(nullable NSString *)name
                                          mimeType:(nullable NSString *)mimeType
                                        parameters:(nullable NSDictionary *)parameters
                                          progress:(nullable Progress)progress
                                          Response:(nonnull Response)response;
/**
 *
 *	上传文件操作
 *
 *	@param url					上传路径
 *	@param uploadingFile        待上传文件的路径
 *	@param progress             上传进度
 *	@param response				回调
 *
 */
+ (nullable NSURLSessionDataTask *)uploadFileWithUrl:(nonnull NSString *)url
                                       uploadingFile:(nonnull NSString *)uploadingFile
                                            progress:(nullable Progress)progress
                                            Response:(nonnull Response)response;

#pragma mark - download
/**
 *
 *  下载文件
 *
 *  @param url           下载URL
 *  @param saveToPath    下载到哪个路径下
 *  @param progressBlock 下载进度
 *  @param response       回调
 */
+ (nullable NSURLSessionDownloadTask *)download:(nonnull NSString *)url
                                     saveToPath:(nonnull NSString *)saveToPath
                                       progress:(nullable Progress)progress
                                       Response:(nonnull Response)response;



@end
